const __ = {
    poolDic: Symbol('poolDic')
}
export class XGPool {

    constructor() {
        this[__.poolDic] = {}
    }

    /**
     * 根据对象标识符
     * 获取对应的对象池
     */
    getPoolBySign(name: string) {
        return this[__.poolDic][name] || (this[__.poolDic][name] = [])
    }

    /**
     * 根据传入的对象标识符，查询对象池
     * 对象池为空创建新的类，否则从对象池中取
     * @param name 对象标识符
     * @param firstCreate 第一次创建
     */
    getItemByClass(name: string, firstCreate: Function) {

        let pool = this.getPoolBySign(name);//先获取是否有空闲的

        if (pool.length) {
            return pool.shift();
        } else {
            return firstCreate();
        }
    }

    /**
     * 将对象回收到对象池
     * 方便后续继续使用
     */
    recover(name: string, instance: any) {
        this.getPoolBySign(name).push(instance);
    }

}